<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数</title>
</head>
<body>
    <p>
        <ol>
            尾调用优化条件
            <li> 严格模式</li>
            <li> 外部函数的返回值是对尾调用函数的调用 ，就是return一个函数的调用</li>
            <li> 尾调用函数后不需要执行额外的逻辑，只返回一个函数的调用</li>
            <li> 尾调用函数不是引用外部函数作用域中自由变量的闭包，return 的函数没有使用外层函数的变量</li>
        </ol>
    </p>
</body>
<script>
    function fib(n){
        let fn= [0,1]
        if(n < 2){
            fn[n] =n ;
            return n
        };
        if( fn[n] ){ return fn[n]}
        fn[n] = fib(n-1) + fib(n -2);
        return fn[n]
    }
    console.log(fib(10))

    //改造
    function fib2(n){
        return help(0,1,n)
    }
    // 纯函数
    function help(n1,n2,n){
        if(n < 2) return n
        return help(n2,n1 + n2, n-1)
}

function plus(a,b){
    return  a + b ;

}
plus(a,b)

plus(a)(b)
function plus2(a){
    return function(b){
        return a + b
    }
}
/* 参数复用 */

 function kelihua(fn){
    return function target(...args ){
        if( args.length < fn.length){
            return kelihua(target)
        }
    }
 }
</script>
</html>